package com.neudu.glsb.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.neudu.glsb.commons.JSONReturn;
import com.neudu.glsb.pojo.SystemConfig;
import com.neudu.glsb.service.SystemConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@RestController
public class SystemConfigController {

    @Autowired
    private SystemConfigService systemConfigService;
    @Autowired
    private JSONReturn jsonReturn;

    @PostMapping("get_system_config")
    public String getSystemConfig() {
        try {
            SystemConfig config = systemConfigService.getOne(new LambdaQueryWrapper<SystemConfig>());
            if (config != null) {
                return jsonReturn.returnSuccess(config);
            } else {
                return jsonReturn.returnError("未找到系统配置信息");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return jsonReturn.returnError(e.getMessage());
        }
    }

    @PostMapping("update_system_config")
    public String updateSystemConfig(@RequestBody SystemConfig config) {
        try {
            if (ObjectUtils.isEmpty(config.getId())) {
                return jsonReturn.returnError("更新失败，id 不能为空");
            }
            boolean success = systemConfigService.updateById(config);
            if (success) {
                return jsonReturn.returnSuccess();
            } else {
                return jsonReturn.returnError("更新失败，未找到对应的配置信息");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return jsonReturn.returnError(e.getMessage());
        }
    }

    @PostMapping("upload_payment_code")
    public String uploadPaymentCode(@RequestParam("file") MultipartFile file) {
        try {
            if (file.isEmpty()) {
                return jsonReturn.returnError("上传文件为空");
            }

            SystemConfig config = systemConfigService.getOne(new LambdaQueryWrapper<SystemConfig>());
            if (config == null) {
                config = new SystemConfig();
            }

            // 存储图片字节数据到 paymentCode
            config.setPaymentCode(file.getBytes());

            // 保存文件到服务器，并获取文件路径
            String filePath = saveFileToServer(file);
            config.setPaymentCodeUrl(filePath);

            boolean success = systemConfigService.saveOrUpdate(config);
            if (success) {
                // 返回包含新配置的成功信息，前端可据此更新页面显示
                return jsonReturn.returnSuccess(config);
            } else {
                return jsonReturn.returnError("上传失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
            return jsonReturn.returnError(e.getMessage());
        }
    }

    // 保存文件到服务器的方法，这里简单示例保存到本地某个目录
    private String saveFileToServer(MultipartFile file) throws IOException {
        // 生成唯一文件名
        String originalFilename = file.getOriginalFilename();
        String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
        String uuid = UUID.randomUUID().toString();
        String newFileName = uuid + fileExtension;

        // 假设保存到本地的 /uploads 目录，你可以根据实际情况修改
        String uploadDir = "D:/upload";
        File dir = new File(uploadDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        File targetFile = new File(dir, newFileName);
        file.transferTo(targetFile);

        // 返回文件路径，这里根据实际情况调整路径格式
        // 如果是 Spring Boot 项目，可能需要配置静态资源映射，确保前端能访问该路径
        return uploadDir + "/" + newFileName;
    }
}